--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vendor/lxmfy/tests/test_signatures.py dev (9051d6cc) Text, 15.90 KB
T8b949e"""Tests for LXMFy signature functionality."""
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMockTb4b4b4, Te6edf3patch
Tff7b72import T7ee787LXMF
Tff7b72import T7ee787pytest
Tff7b72import T7ee787RNS
Tff7b72from T7ee787lxmfyT7ee787.T7ee787signatures Tff7b72import Tb4b4b4(
Te6edf3FIELD_SIGNATURETb4b4b4,
Te6edf3SignatureManagerTb4b4b4,
Te6edf3sign_outgoing_messageTb4b4b4,
Te6edf3verify_incoming_messageTb4b4b4,
Tb4b4b4)
Tff7b72class T56d364TestSignatureManagerTb4b4b4:
T8b949e"""Test SignatureManager class."""
Tff7b72def Td2a8fftest_initTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test SignatureManager initialization."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(
Te6edf3botTb4b4b4,
Te6edf3verification_enabledTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3require_signaturesTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3request_unknown_identitiesTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3sig_managerTff7b72.Td2a8ffbot Tff7b72== Te6edf3bot
Tff7b72assert Te6edf3sig_managerTff7b72.Td2a8ffverification_enabled Tff7b72is Tff7b72True
Tff7b72assert Te6edf3sig_managerTff7b72.Td2a8ffrequire_signatures Tff7b72is Tff7b72True
Tff7b72assert Te6edf3sig_managerTff7b72.Td2a8ffrequest_unknown_identities Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_init_defaultsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test SignatureManager initialization with defaults."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4)
Tff7b72assert Te6edf3sig_managerTff7b72.Td2a8ffverification_enabled Tff7b72is Tff7b72False
Tff7b72assert Te6edf3sig_managerTff7b72.Td2a8ffrequire_signatures Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_sign_message_successTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test successful message signing."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4)
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
T8b949e# Create a proper mock message
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsource_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffsource_hashTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffdestination_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffdest_hashTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest contentTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fftitle Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest titleTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Tb4b4b4}
T8b949e# Mock the canonicalize method to return predictable data
Te6edf3expected_data Tff7b72= Tb4b4b4(
Ta5d6ffbTa5d6ff"Ta5d6ffsource:source_hash|dest:dest_hash|content:test content|title:test titleTa5d6ff"
Tb4b4b4)
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(
Te6edf3sig_managerTb4b4b4,
Ta5d6ff"Ta5d6ff_canonicalize_messageTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Te6edf3expected_dataTb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffsign_messageTb4b4b4(Te6edf3mock_messageTb4b4b4, Te6edf3identityTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultTb4b4b4, Tffa657bytesTb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72> T79c0ff0 T8b949e# Should have a signature
Tff7b72def Td2a8fftest_sign_message_exceptionTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test sign_message with exception."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4)
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
T8b949e# Mock the _canonicalize_message to raise an exception
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(
Te6edf3sig_managerTb4b4b4,
Ta5d6ff"Ta5d6ff_canonicalize_messageTa5d6ff"Tb4b4b4,
Te6edf3side_effectTff7b72=Tf85149ExceptionTb4b4b4(Ta5d6ff"Ta5d6ffTest errorTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ExceptionTb4b4b4, Te6edf3matchTff7b72=Ta5d6ff"Ta5d6ffTest errorTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3sig_managerTff7b72.Td2a8ffsign_messageTb4b4b4(Te6edf3mock_messageTb4b4b4, Te6edf3identityTb4b4b4)
Tff7b72def Td2a8fftest_verify_message_signature_successTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test successful signature verification."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4)
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
T8b949e# Create a message and sign it
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsource_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffsource_hashTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffdestination_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffdest_hashTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest contentTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fftitle Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest titleTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Tb4b4b4}
T8b949e# Sign the message
Te6edf3signature Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffsign_messageTb4b4b4(Te6edf3mock_messageTb4b4b4, Te6edf3identityTb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3FIELD_SIGNATURETb4b4b4] Tff7b72= Te6edf3signature
T8b949e# Verify the signature
Te6edf3sender_hash Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3identityTff7b72.Td2a8ffhashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffverify_message_signatureTb4b4b4(
Te6edf3mock_messageTb4b4b4,
Te6edf3signatureTb4b4b4,
Te6edf3sender_hashTb4b4b4,
Te6edf3identityTb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_verify_message_signature_invalidTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test signature verification with invalid signature."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4)
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsource_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffsource_hashTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffdestination_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffdest_hashTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest contentTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fftitle Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest titleTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Tb4b4b4}
T8b949e# Use a fake signature
Te6edf3fake_signature Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fffake_signatureTa5d6ff"
Te6edf3sender_hash Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3identityTff7b72.Td2a8ffhashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffverify_message_signatureTb4b4b4(
Te6edf3mock_messageTb4b4b4,
Te6edf3fake_signatureTb4b4b4,
Te6edf3sender_hashTb4b4b4,
Te6edf3identityTb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_verify_message_signature_no_identity_recallTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test signature verification when identity recall fails."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsource_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffsource_hashTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffdestination_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffdest_hashTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest contentTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fftitle Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest titleTa5d6ff"
T8b949e# Use a non-existent hash
Te6edf3fake_hash Tff7b72= Ta5d6ff"Ta5d6ffnonexistentTa5d6ff"
Te6edf3fake_signature Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fffake_signatureTa5d6ff"
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffverify_message_signatureTb4b4b4(
Te6edf3mock_messageTb4b4b4,
Te6edf3fake_signatureTb4b4b4,
Te6edf3fake_hashTb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_verify_message_signature_exceptionTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test signature verification with exception."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsource_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffsource_hashTa5d6ff"
T8b949e# Mock _canonicalize_message to raise exception
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(
Te6edf3sig_managerTb4b4b4,
Ta5d6ff"Ta5d6ff_canonicalize_messageTa5d6ff"Tb4b4b4,
Te6edf3side_effectTff7b72=Tf85149ExceptionTb4b4b4(Ta5d6ff"Ta5d6ffTest errorTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffverify_message_signatureTb4b4b4(
Te6edf3mock_messageTb4b4b4,
Ta5d6ffbTa5d6ff"Ta5d6ffsignatureTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffake_hashTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_canonicalize_message_basicTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test basic message canonicalization."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsource_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffsource_hashTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffdestination_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffdest_hashTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest contentTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fftitle Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest titleTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fftimestamp Tff7b72= T79c0ff1234567890
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{T79c0ff1Tb4b4b4: Ta5d6ffbTa5d6ff"Ta5d6fffield1Ta5d6ff"Tb4b4b4, Te6edf3FIELD_SIGNATURETb4b4b4: Ta5d6ffbTa5d6ff"Ta5d6ffsignatureTa5d6ff"Tb4b4b4}
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ff_canonicalize_messageTb4b4b4(Te6edf3mock_messageTb4b4b4)
Te6edf3expected_parts Tff7b72= Tb4b4b4[
Ta5d6ffbTa5d6ff"Ta5d6ffsource:736f757263655f68617368Ta5d6ff"Tb4b4b4, T8b949e# hex of b"source_hash"
Ta5d6ffbTa5d6ff"Ta5d6ffdest:646573745f68617368Ta5d6ff"Tb4b4b4, T8b949e# hex of b"dest_hash"
Ta5d6ffbTa5d6ff"Ta5d6ffcontent:test contentTa5d6ff"Tb4b4b4,
Ta5d6ffbTa5d6ff"Ta5d6fftitle:test titleTa5d6ff"Tb4b4b4,
Ta5d6ffbTa5d6ff"Ta5d6fftimestamp:1234567890Ta5d6ff"Tb4b4b4,
Ta5d6ffbTa5d6ff"Ta5d6fffield_1:bTa5d6ff'Ta5d6fffield1Ta5d6ff'Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Te6edf3expected Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff|Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3expected_partsTb4b4b4)
Tff7b72assert Te6edf3result Tff7b72== Te6edf3expected
Tff7b72def Td2a8fftest_canonicalize_message_minimalTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test message canonicalization with minimal fields."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsource_hash Tff7b72= Tff7b72None
Te6edf3mock_messageTff7b72.Td2a8ffdestination_hash Tff7b72= Tff7b72None
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Tff7b72None
Te6edf3mock_messageTff7b72.Td2a8fftitle Tff7b72= Tff7b72None
Te6edf3mock_messageTff7b72.Td2a8fftimestamp Tff7b72= Tff7b72None
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tff7b72None
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ff_canonicalize_messageTb4b4b4(Te6edf3mock_messageTb4b4b4)
Tff7b72assert Te6edf3result Tff7b72== Ta5d6ffbTa5d6ff"Ta5d6ff"
Tff7b72def Td2a8fftest_should_verify_message_enabledTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test should_verify_message when verification is enabled."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
T8b949e# Remove permissions attribute to simulate no permissions system
Tff7b72del Te6edf3botTff7b72.Td2a8ffpermissions
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4, Te6edf3verification_enabledTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffshould_verify_messageTb4b4b4(Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_should_verify_message_disabledTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test should_verify_message when verification is disabled."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4, Te6edf3verification_enabledTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffshould_verify_messageTb4b4b4(Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_should_verify_message_bypass_permissionTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test should_verify_message with bypass permission."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffpermissions Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffpermissionsTff7b72.Td2a8ffenabled Tff7b72= Tff7b72True
Te6edf3botTff7b72.Td2a8ffpermissionsTff7b72.Td2a8ffhas_permissionTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4, Te6edf3verification_enabledTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffshould_verify_messageTb4b4b4(Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72False
Te6edf3botTff7b72.Td2a8ffpermissionsTff7b72.Td2a8ffhas_permissionTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_should_verify_message_no_bypassTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test should_verify_message without bypass permission."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffpermissions Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffpermissionsTff7b72.Td2a8ffenabled Tff7b72= Tff7b72True
Te6edf3botTff7b72.Td2a8ffpermissionsTff7b72.Td2a8ffhas_permissionTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72False
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4, Te6edf3verification_enabledTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffshould_verify_messageTb4b4b4(Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_handle_unsigned_message_require_signaturesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test handle_unsigned_message when signatures are required."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4, Te6edf3require_signaturesTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffhandle_unsigned_messageTb4b4b4(Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmessage_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_handle_unsigned_message_verification_enabledTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test handle_unsigned_message when verification is enabled but not required."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(
Te6edf3botTb4b4b4,
Te6edf3verification_enabledTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3require_signaturesTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffhandle_unsigned_messageTb4b4b4(Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmessage_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_handle_unsigned_message_disabledTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test handle_unsigned_message when verification is disabled."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3sig_manager Tff7b72= Te6edf3SignatureManagerTb4b4b4(Te6edf3botTb4b4b4)
Te6edf3result Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffhandle_unsigned_messageTb4b4b4(Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmessage_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
Tff7b72class T56d364TestSignatureFunctionsTb4b4b4:
T8b949e"""Test signature utility functions."""
Tff7b72def Td2a8fftest_sign_outgoing_message_passthroughTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test sign_outgoing_message is a pass-through (LXMF handles signing)."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_manager Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffverification_enabled Tff7b72= Tff7b72True
Te6edf3botTff7b72.Td2a8ffidentity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3result Tff7b72= Te6edf3sign_outgoing_messageTb4b4b4(Te6edf3botTb4b4b4, Te6edf3mock_messageTb4b4b4)
Tff7b72assert Te6edf3result Tff7b72== Te6edf3mock_message
T8b949e# Should not modify fields - LXMF will handle signing during pack()
Tff7b72def Td2a8fftest_verify_incoming_message_valid_signatureTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test verify_incoming_message with valid LXMF signature."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_manager Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffshould_verify_messageTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsignature_validated Tff7b72= Tff7b72True
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmessage_hashTa5d6ff"
Te6edf3result Tff7b72= Te6edf3verify_incoming_messageTb4b4b4(Te6edf3botTb4b4b4, Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_verify_incoming_message_skip_verificationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test verify_incoming_message when verification should be skipped."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_manager Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffshould_verify_messageTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72False
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3verify_incoming_messageTb4b4b4(Te6edf3botTb4b4b4, Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_verify_incoming_message_invalid_signatureTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test verify_incoming_message when LXMF signature is invalid."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_manager Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffshould_verify_messageTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsignature_validated Tff7b72= Tff7b72False
Te6edf3mock_messageTff7b72.Td2a8ffunverified_reason Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSIGNATURE_INVALID
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmessage_hashTa5d6ff"
Te6edf3result Tff7b72= Te6edf3verify_incoming_messageTb4b4b4(Te6edf3botTb4b4b4, Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_verify_incoming_message_source_unknown_require_sigTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test verify_incoming_message when source is unknown and signatures required."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_manager Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffshould_verify_messageTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffrequire_signatures Tff7b72= Tff7b72True
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsignature_validated Tff7b72= Tff7b72False
Te6edf3mock_messageTff7b72.Td2a8ffunverified_reason Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSOURCE_UNKNOWN
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmessage_hashTa5d6ff"
Te6edf3result Tff7b72= Te6edf3verify_incoming_messageTb4b4b4(Te6edf3botTb4b4b4, Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_verify_incoming_message_source_unknown_not_requiredTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test verify_incoming_message when source is unknown but signatures not required."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_manager Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffshould_verify_messageTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffrequire_signatures Tff7b72= Tff7b72False
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsignature_validated Tff7b72= Tff7b72False
Te6edf3mock_messageTff7b72.Td2a8ffunverified_reason Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSOURCE_UNKNOWN
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmessage_hashTa5d6ff"
Te6edf3result Tff7b72= Te6edf3verify_incoming_messageTb4b4b4(Te6edf3botTb4b4b4, Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_verify_incoming_message_unverified_other_reasonTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test verify_incoming_message with other unverified reason."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_manager Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffshould_verify_messageTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffhandle_unsigned_messageTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsignature_validated Tff7b72= Tff7b72False
Te6edf3mock_messageTff7b72.Td2a8ffunverified_reason Tff7b72= T79c0ff999 T8b949e# Some other reason
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmessage_hashTa5d6ff"
Te6edf3result Tff7b72= Te6edf3verify_incoming_messageTb4b4b4(Te6edf3botTb4b4b4, Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffhandle_unsigned_messageTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_verify_incoming_message_source_unknown_request_identTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test verify_incoming_message when source is unknown and requesting is enabled."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_manager Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffshould_verify_messageTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffrequest_unknown_identities Tff7b72= Tff7b72True
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffrequested_identities Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffrequire_signatures Tff7b72= Tff7b72False
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffsignature_validated Tff7b72= Tff7b72False
Te6edf3mock_messageTff7b72.Td2a8ffunverified_reason Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSOURCE_UNKNOWN
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmessage_hashTa5d6ff"
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6fflxmfy.signatures.RNS.Transport.request_pathTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3mock_request_pathTb4b4b4:
Te6edf3result Tff7b72= Te6edf3verify_incoming_messageTb4b4b4(Te6edf3botTb4b4b4, Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffabcdef1234567890Ta5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
Te6edf3mock_request_pathTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffabcdef1234567890Ta5d6ff" Tff7b72in Te6edf3botTff7b72.Td2a8ffsignature_managerTff7b72.Td2a8ffrequested_identities
Tff7b72def Td2a8fftest_verify_incoming_message_no_managerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Test verify_incoming_message when no signature manager exists."""
Te6edf3bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
T8b949e# Remove signature_manager attribute to simulate it not existing
Tff7b72del Te6edf3botTff7b72.Td2a8ffsignature_manager
Te6edf3mock_message Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3verify_incoming_messageTb4b4b4(Te6edf3botTb4b4b4, Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3result Tff7b72is Tff7b72True
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────